package thread;

import java.util.Collections;

/**
 * 守护线程
 *
 * 线程分为两类:用户线程和守护线程
 * 用户线程:也常称为"前台线程",正常创建的线程默认就是用户线程
 * 守护线程(也常称为后台线程)是通过用户线程调用setDaemon(true)设置而来的.
 *
 * 它们的主要区别体现在进程结束时:
 * 当进程中所有的用户线程都结束时,进程就会结束,此时会强制杀死所有还在运行的守护线程.
 *
 * GC就是运行在守护线程上的
 */
public class DaemonThreadDemo {
    public static void main(String[] args) {
        Thread cxk=new Thread("蔡徐坤"){
            public void run(){
                for (int i = 0; i < 5; i++) {
                    System.out.println(getName()+":在唱跳rap篮球");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println(getName()+":哎呦你干嘛");
            }
        };

        Thread wyf=new Thread("吴亦凡"){
            public void run(){
               while (true){
                   System.out.println(getName()+":在咚咚锵咚咚锵的踩缝纫机");
                   try {
                       Thread.sleep(1000);
                   } catch (InterruptedException e) {
                       e.printStackTrace();
                   }
               }
            }
        };

        cxk.start();
        //设置守护线程的工作必须在线程启动之前进行!否则会抛出异常
        wyf.setDaemon(true);
        wyf.start();//将jack线程设置为守护线程

        /*
            如果main方法没有执行完毕,主线程不会结束,那么就算rose线程结束继承也不会结束
            此时
         */
        while (true);
    }
}
